iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
Software Development

【錢不夠買ps的我,只好用OpenCV來修圖了!】系列 第 19

【沒錢ps,我用OpenCV!】Day 19 - 花式修圖1,OpenCV 的圖片自適應二值化,產生更好效果的黑白圖片!cv2.adaptiveThreshold

  • 分享至 

  • xImage
  •  

先來看看今天的結果圖

https://ithelp.ithome.com.tw/upload/images/20201001/20120424wyFAcdXy4Z.png

-> 此篇文章的程式碼 github

Day19_自適應圖片二值化_adaptiveThreshold.ipynb

前言

花式修圖的這個系列...
主要會講的是一些比進階再更進階的內容,
會有比較多冷門的功能,或是更難的演算法。

OpenCV 的圖片自適應二值化,產生更好效果的黑白圖片!

# 先將圖片轉為灰階
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 

# 將圖片做模糊化,可以降噪
blur_img = cv2.medianBlur(img,5) 

# 一般圖二值化(未模糊降噪)
ret, th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)

# 一般圖自適應平均二值化(未模糊降噪)
th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,11,2)
        
# 一般圖自適應高斯二值化(未模糊降噪)
th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2)
        
# 一般圖二值化(有模糊降噪)
ret, th4 = cv2.threshold(blur_img,127,255,cv2.THRESH_BINARY)

# 一般圖算術平均法的自適應二值化(有模糊降噪)
th5 = cv2.adaptiveThreshold(blur_img,255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,11,2)
        
# 一般圖高斯加權均值法自適應二值化(有模糊降噪)      
th6 = cv2.adaptiveThreshold(blur_img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2)

什麼是 自適應二值化

我們先來討論什麼是 自適應的二值化
一般的 二值化 我們只會考慮單一點的值,直接去做閥值分析,
但一張圖片的「每個鄰近的像素都是彼此有關連的」。

如果單純只針對單一個點去看,似乎失去了對整張圖相鄰點的考慮,
因此 自適應二值化 就是在幫助我們找到單一點與鄰近區域的關係。

自適應二值化的算法

cv2.adaptiveThreshold 能夠幫助我們將一張圖片做自適應的二值化,
自適應的二值化又分為

  • 算術平均法的自適應二值化: cv2.ADAPTIVE_THRESH_MEAN_C,取的是「區域平均值」
  • 高斯加權均值法自適應二值化: cv2.ADAPTIVE_THRESH_GAUSSIAN_C
    取的是「高斯平均值」(高斯分佈)

cv2.adaptiveThreshold 函數形式

cv2.adaptiveThreshold(image, 255, 自適應二值化算法, 閥值類型, 參考局部大小, 偏移量)
  • image: 輸入圖片
  • 自適應二值化算法: 可使用 cv2.ADAPTIVE_THRESH_MEAN_Ccv2.ADAPTIVE_THRESH_GAUSSIAN_C
  • 閥值類型: 可使用 THRESH_BINARYTHRESH_BINARY_INV
    看是超過閥值要「黑白」還是「白黑」。
  • 參考局部大小: 就是參考區域的大小
  • 偏移量: 微調用的參數

自適應二值化 搭配模糊降噪,能有更好的效果

通常在做 自適應二值化 之前,我們都會先將圖片做模糊化,
能夠達到降噪的效果,看下圖結果的圖片應該能很明顯地分得出差別。

(文章內容中,我們使用 cv2.medianBlur 來做模糊降噪的示範。)

https://ithelp.ithome.com.tw/upload/images/20201001/20120424dceOKY04nL.png

Reference

https://blog.csdn.net/on2way/article/details/46812121

https://blog.csdn.net/weixin_40647819/article/details/90213858?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

https://blog.csdn.net/qq_37385726/article/details/82017177

https://www.twblogs.net/a/5b8c1ba02b717718833082e1


上一篇
【沒錢ps,我用OpenCV!】Day 18 - 進階修圖5,運用 OpenCV 做圖片二值化,產生黑白的圖片吧!cv2.threshold 各種選擇參數大全
下一篇
【沒錢ps,我用OpenCV!】Day 20 - 花式修圖2,OpenCV 的各種 Threshold 方法整理,Otsu's Threshold 大津二值化,自動計算最佳閥值,做出最好的黑白效果圖!
系列文
【錢不夠買ps的我,只好用OpenCV來修圖了!】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言